#include "pch.hpp"
#include "Document.hpp"




Document::Document()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Document::Document(const QString& fileName)
	: m_fileName(fileName)
{
	load(fileName);
}
///////////////////////////////////////////////////////////////////////////////////////////////////




QString Document::fileName() const
{
	return m_fileName;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Document::load(QString fileName)
{
	// Okay, load the bastard
	QFileInfo info(fileName);
	QDir path = info.absolutePath();
	QFile f(fileName);
	if(!f.open(QIODevice::ReadOnly))
		BOOSTEXT_THROW(exception(format("Can't open style definition '%1%': %2%") % fileName % f.error()));

	QDomDocument doc;

	QString errorMsg;
	if(!doc.setContent(&f, false, &errorMsg))
		BOOSTEXT_THROW(exception(format("Can't load style definition '%1%', parse error: %2%") % fileName % errorMsg));

	QDomElement xml = doc.documentElement();

	m_styleDocument.load(xml, path);

	QDomElement styleElem = xml.firstChildElement("style");
	if(!styleElem.isNull())
	{
		m_cssDocument.setPlainText(styleElem.text());
	}

	m_fileName = fileName;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Document::save()
{
	QDomDocument doc;
	QDomElement xml = doc.createElement("xml");

	QFileInfo info(m_fileName);
	m_styleDocument.save(doc, xml, info);
	doc.appendChild(xml);

	QDomElement style = doc.createElement("style");
	QDomCDATASection data = doc.createCDATASection(m_cssDocument.toPlainText());
	style.appendChild(data);
	xml.appendChild(style);

	QFile file(m_fileName);
	if(!file.open(QIODevice::WriteOnly))
		BOOSTEXT_THROW(exception("Unable to create style definition file"));

	file.write(doc.toByteArray());
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Document::save(QString fileName)
{
	m_fileName = fileName;
	save();
}
///////////////////////////////////////////////////////////////////////////////////////////////////




StyleDocument& Document::styleDocument()
{
	return m_styleDocument;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

const StyleDocument& Document::styleDocument() const
{
	return m_styleDocument;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QTextDocument* Document::cssDocument()
{
	return &m_cssDocument;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

const QTextDocument* Document::cssDocument() const
{
	return &m_cssDocument;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
